#pragma once
#include"singleton.h"
#include <functional>
#include <map>

//逻辑系统负责处理具体的业务，controller层，负责具体的业务处理

class HttpConnection;
using HttpHandler = std::function<void(std::shared_ptr<HttpConnection>)>;		//函数对象类型：该函数对象类型可以存储类似于这样的函数对象：函数，lambda。。。，
//不管是什么类型的接口，GET，POST都是统一成接受一个connection的处理函数即可，统一类型

class LogicSystem :public Singleton<LogicSystem>
{
	friend class Singleton<LogicSystem>;
public:
	~LogicSystem();
	bool HandleGet(std::string path, std::shared_ptr<HttpConnection> con);								//处理Get
	bool HandlePost(std::string path, std::shared_ptr<HttpConnection> con);						//处理handle



	void RegGet(std::string, HttpHandler handler);					//注册路由函数，每一个发送过来的路由都有对赢的消息处理函数，有这个函数进行注册

	void RegPost(std::string url, HttpHandler handler);				//注册Post函数
private:
	LogicSystem();
	std::map<std::string, HttpHandler> _post_handlers;				//定死了http就只有这几种方法
	std::map<std::string, HttpHandler> _get_handlers;				
																	//不像之前那么做的原因，统一逻辑系统的函数对象类型，具体的函数操作，参数操作在函数对象里面操作
																	//参数被直接解析到了connect对象中，如果涉及到复杂的逻辑操作，在函数对里面处理就行，提升了框架性
};

